package ljl.alg.wangzheng_camp.round1.stack_and_queue;

import java.util.LinkedList;

/**
 * 这个题真没我想的那么简单
 * 甚至有一点难
 * <p>
 * 翻转操作依靠的是从第二个元素开始
 */
public class _225_stack_with_2_q {
    
    /**
     * 我自己写的，非常的笨逼
     */
    class MyStack {
        LinkedList<Integer> q1 = new LinkedList<>(), q2 = new LinkedList<>();
        
        public void push(int x) {
            q2.offer(x);
        }
        
        public int pop() {
            while (q2.size() > 1) {
                q1.offer(q2.poll());
            }
            int res = q2.poll();
            LinkedList<Integer> t = q2;
            q2 = q1;
            q1 = t;
            return res;
        }
        
        public int top() {
            int res = pop();
            push(res);
            return res;
        }
        
        public boolean empty() {
            return q2.isEmpty();
        }
    }
    
    class MyStack82 {
        LinkedList<Integer> q1 = new LinkedList<>(), q2 = new LinkedList<>();
        
        public void push(int x) {
            q2.push(x);
            while (!q1.isEmpty())
                q2.offer(q1.poll());
            LinkedList<Integer> t = q1;
            q1 = q2;
            q2 = t;
        }
        
        public int pop() {
            return q1.poll();
        }
        
        public int top() {
            return q1.peek();
        }
        
        public boolean empty() {
            return q1.isEmpty();
        }
    }
    
    class MyStack81 {
        LinkedList<Integer> q = new LinkedList<>();
        
        public void push(int x) {
            int n = q.size();
            q.offer(x);
            for (int i = 0; i < n; i++) {
                q.offer(q.poll());
            }
        }
        
        public int pop() {
            return q.poll();
        }
        
        public int top() {
            return q.peek();
        }
        
        public boolean empty() {
            return q.isEmpty();
        }
    }
    
}
